home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / termsorc.lha / Extras / Source / gtlayout-source.lha / LTP_PasswordEditRoutine.c < prev    next >
C/C++ Source or Header  |  1995-09-24  |  2KB  |  131 lines

  1. /*  GadTools layout toolkit
  2. **
  3. **  Copyright © 1993-1995 by Olaf `Olsen' Barthel
  4. **  Freely distributable.
  5. */
  6.  
  7. #include "gtlayout_global.h"
  8.  
  9. #ifdef DO_PASSWORD_KIND
  10. ULONG __asm __saveds
  11. LTP_PasswordEditRoutine(register __a0 struct Hook *Hook,register __a2 struct SGWork *Work,register __a1 ULONG *Msg)
  12. {
  13.     ObjectNode *Node;
  14.  
  15.     if(GETOBJECT(Work -> Gadget,Node))
  16.     {
  17.         STRPTR    Buffer        = Node -> Special . String . RealString;
  18.         STRPTR    Original    = Node -> Special . String . Original;
  19.         WORD    Len;
  20.  
  21.         if(Work -> IEvent -> ie_Code == 0x5F)
  22.         {
  23.             LayoutHandle *Handle = Hook -> h_Data;
  24.  
  25.             if(Handle -> HelpHook)
  26.             {
  27.                 Work -> Code    = 0x5F;
  28.                 Work -> Actions    = (Work -> Actions & ~SGA_BEEP) | SGA_END | SGA_USE;
  29.  
  30.                 return(TRUE);
  31.             }
  32.         }
  33.  
  34.         switch(*Msg)
  35.         {
  36.             case SGH_KEY:
  37.  
  38.                 switch(Work -> EditOp)
  39.                 {
  40.                     case EO_INSERTCHAR:
  41.  
  42.                         Buffer[Work -> BufferPos - 1]    = Work -> Code;
  43.                         Buffer[Work -> NumChars]        = 0;
  44.  
  45.                         Work -> Code = (WORD)'·';
  46.  
  47.                         Work -> WorkBuffer[Work -> BufferPos - 1] = (UBYTE)'·';
  48.  
  49.                         break;
  50.  
  51.                     case EO_RESET:
  52.  
  53.                         Len = strlen(Original);
  54.  
  55.                         strcpy(Buffer,Original);
  56.  
  57.                         memset(Work -> WorkBuffer,'·',Len);
  58.  
  59.                         Work -> WorkBuffer[Len] = 0;
  60.  
  61.                         Work -> NumChars    = Len;
  62.                         Work -> BufferPos    = Len;
  63.                         Work -> EditOp        = EO_BIGCHANGE;
  64.  
  65.                         break;
  66.  
  67.                     case EO_CLEAR:
  68.  
  69.                         Work -> WorkBuffer[0]    = 0;
  70.                         Work -> NumChars        = 0;
  71.                         Work -> BufferPos        = 0;
  72.                         Work -> EditOp            = EO_BIGCHANGE;
  73.  
  74.                         Buffer[0] = 0;
  75.  
  76.                         break;
  77.  
  78.                     case EO_DELBACKWARD:
  79.  
  80.                         Buffer[Work -> NumChars] = 0;
  81.                         break;
  82.  
  83.                     case EO_NOOP:
  84.  
  85.                         break;
  86.  
  87.                     case EO_ENTER:
  88.  
  89.                         strcpy(Original,Buffer);
  90.  
  91.                         if(!(Work -> IEvent -> ie_Qualifier & QUALIFIER_SHIFT))
  92.                         {
  93.                             if(!Node -> Special . String . LastGadget && Node -> Special . String . LayoutHandle -> AutoActivate)
  94.                                 Work -> Actions |= SGA_NEXTACTIVE;
  95.  
  96.                             if(!(Work -> Actions & SGA_NEXTACTIVE))
  97.                                 Work -> Code = '\r';
  98.                         }
  99.  
  100.                         break;
  101.  
  102.                     case EO_MOVECURSOR:
  103.                     case EO_DELFORWARD:
  104.  
  105.                         Work -> Actions &= ~SGA_USE;
  106.                         break;
  107.  
  108.                     default:
  109.  
  110.                         Work -> Actions &= ~SGA_USE;
  111.                         Work -> Actions |=  SGA_BEEP;
  112.                         break;
  113.                 }
  114.  
  115.                 break;
  116.  
  117.             case SGH_CLICK:
  118.  
  119.                 Work -> BufferPos    = Work -> NumChars;
  120.                 Work -> EditOp        = EO_BIGCHANGE;
  121.  
  122.                 break;
  123.         }
  124.  
  125.         return(TRUE);
  126.     }
  127.     else
  128.         return(FALSE);
  129. }
  130. #endif
  131.